home *** CD-ROM | disk | FTP | other *** search
/ Computer Select (Limited Edition) / Computer Select.iso / pcmag / v11n08 / wprints.exe / WPRINC.EXE / SETTINGS.C < prev    next >
C/C++ Source or Header  |  1992-04-11  |  5KB  |  154 lines

  1. #include <windows.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <direct.h>
  6. #include <errno.h>
  7. #include "wprint.h"
  8.  
  9. typedef void FAR PASCAL FNDEVICEMODE (HWND,HANDLE,LPSTR,LPSTR);
  10. typedef FNDEVICEMODE FAR * LPFNDEVICEMODE;
  11.  
  12. static char szPrinter [80], 
  13.             szDriverFile[16], 
  14.             szDeviceName[36], 
  15.             szOutputPort[10];
  16.  
  17.  
  18. BOOL FAREXPORT INIDlgProc (HWND hDlg, unsigned message, WORD wParam, LONG lParam)
  19. {
  20. BOOL ShowPSBox (HWND);
  21. void SetPrinterText (HWND);
  22. char szMagnifyBy[16];
  23. static int  nScaling;
  24.  
  25. switch (message) {
  26.     case WM_INITDIALOG:
  27.         SetPrinterText (hDlg);
  28.         nScaling = GetProfileInt ((LPSTR)"WinPrint\0",
  29.                                   (LPSTR)"Scale\0",
  30.                                   (int)-1) - 1;
  31.         GetProfileString ((LPSTR)"WinPrint\0",        
  32.                           (LPSTR)"MagnifyBy\0",
  33.                           (LPSTR)"\0",
  34.                           (LPSTR)szMagnifyBy,
  35.                           sizeof (szMagnifyBy));
  36.  
  37.         if (nScaling < 0) nScaling = 1;
  38.         
  39.         CheckRadioButton (hDlg,IDD_FIT,IDD_MAG_BY,IDD_FIT+nScaling);
  40.         SetDlgItemText (hDlg, IDD_MAG_VALUE, (LPSTR)szMagnifyBy);
  41.         
  42.         if (nScaling!=2)
  43.             EnableWindow (GetDlgItem(hDlg,IDD_MAG_VALUE),FALSE);
  44.         
  45.         CenterWindow (hDlg);
  46.         return (TRUE);
  47.  
  48.     case WM_COMMAND:
  49.         
  50.         if (wParam == IDOK){
  51.             char szint [16];
  52.             BOOL bTranslate;
  53.  
  54.             itoa (nScaling+1,szint, 10); // makes the value 1, 2, or 3
  55.             
  56.             WriteProfileString ((LPSTR)"WinPrint\0",
  57.                                 (LPSTR)"Scale\0",
  58.                                 (LPSTR)szint);
  59.             
  60.             if (nScaling == MAGNIFY){
  61.                 // Let's make sure the magnitude is valid...
  62.                 if (!GetDlgItemInt(hDlg, IDD_MAG_VALUE, &bTranslate, FALSE)
  63.                     || !bTranslate){
  64.                     MessageBox (NULL,"\"Magnify By\" must be a number greater than zero",
  65.                                 "Error", MB_OK|MB_TASKMODAL);
  66.                     break;
  67.                 }
  68.                 // Get the value as text and write it...
  69.                 GetDlgItemText (hDlg, IDD_MAG_VALUE, (LPSTR)szint, 16);
  70.                 
  71.                 WriteProfileString ((LPSTR)"WinPrint\0",
  72.                                     (LPSTR)"MagnifyBy\0",
  73.                                     (LPSTR)szint);
  74.             }            
  75.             
  76.             EndDialog (hDlg, TRUE);
  77.         }    
  78.         
  79.         if (wParam == IDCANCEL)
  80.             EndDialog (hDlg, FALSE);
  81.         
  82.         if (wParam == IDPRINTSETUP)
  83.             if (!ShowPSBox (hDlg))
  84.                 Error (IDS_DRIVERERROR);
  85.         
  86.         if (wParam == IDD_FIT ||
  87.             wParam == IDD_PRN_RES ||
  88.             wParam == IDD_MAG_BY){
  89.             nScaling = wParam - IDD_FIT;
  90.             if (nScaling==2)
  91.                 EnableWindow (GetDlgItem(hDlg,IDD_MAG_VALUE),TRUE);
  92.             else
  93.                 EnableWindow (GetDlgItem(hDlg,IDD_MAG_VALUE),FALSE);
  94.         }
  95.  
  96.         return TRUE;
  97.     default:
  98.         break ;
  99. }
  100. return FALSE;
  101. }
  102.  
  103. BOOL ShowPSBox (HWND hDlg)
  104. {
  105. HANDLE hLib;
  106. LPFNDEVICEMODE lpfnDeviceMode;
  107. BOOL bResult=FALSE;
  108.  
  109. // SetPrinterText() set the driver filename up...
  110. hLib = LoadLibrary (szDriverFile);
  111.  
  112. if (hLib < 32) return bResult;
  113.  
  114. lpfnDeviceMode = (LPFNDEVICEMODE) GetProcAddress(hLib,"DeviceMode");
  115.  
  116. if (lpfnDeviceMode != NULL){
  117.     lpfnDeviceMode (hDlg, hLib, szDeviceName, szOutputPort);
  118.     bResult = TRUE;
  119. }
  120. else bResult = FALSE;
  121.  
  122. FreeLibrary (hLib);
  123.  
  124. if (bResult) 
  125.     PostMessage ((HWND)0xFFFF, WM_WININICHANGE, 0, (LONG)NULL);
  126.  
  127. return bResult;
  128. }
  129.  
  130.  
  131. void SetPrinterText (HWND hDlg)
  132. {
  133. char *szDevice, *szDriver, *szOutput;
  134.  
  135. if (!GetProfileString ((LPSTR)"windows\0",
  136.                   (LPSTR)"device\0",
  137.                   (LPSTR)",,,\0", 
  138.                   (LPSTR)szPrinter, 80))
  139.     return;
  140.  
  141. if ((szDevice = strtok (szPrinter, ",")) &&
  142.     (szDriver = strtok (NULL,      ",")) &&
  143.     (szOutput = strtok (NULL,      ","))){
  144.     lstrcpy ((LPSTR)szDriverFile, szDriver);
  145.     lstrcat ((LPSTR)szDriverFile, (LPSTR)".DRV\0");
  146.     lstrcpy ((LPSTR)szDeviceName,(LPSTR)szDevice);
  147.     lstrcpy ((LPSTR)szOutputPort,(LPSTR)szOutput);
  148.     wsprintf ((LPSTR)szPrinter,"%s on %s",(LPSTR)szDevice, (LPSTR)szOutput);
  149.     SetDlgItemText (hDlg, IDD_CUR_PRINTER, (LPSTR)szPrinter);
  150. }
  151. return; 
  152. }
  153.  
  154.